/**
 * 表格封装，配置一些默认的参数值
 */
layui.define(["jquery", "layer", 'table', 'soulTable', 'myTool'], function (exports) {
    var model_name = "myTable";
    var $ = layui.jquery,
        layer = layui.layer,
        soulTable = layui.soulTable,
        table = layui.table, tableindex;

    var obj = {
        render: function (opt) {

            var defaults = {
                elem: '#table_1',//主键
                toolbar: '#table_1_bar_title',//工具栏
                defaultToolbar: ['filter', 'exports', 'print'],//默认工具栏
                search: true,//搜索按钮
                method: 'get',//请求方法
                cellMinWidth: 80,//最小宽度
                limit: 10,//每页数据 默认
                limits: [10, 20, 30, 40, 50, 500, 1000, 2000],
                id: 'table_1',
                height: 'full-68',
                skin: 'line',
                escape: false,
                page: true,//默认分页
                loading: true,
                authorizeFields: false, // 字段权限开关
                autoColumnWidth: true,
                overflow: { // 默认所有表格都超出
                    type: 'tips'
                    , hoverTime: 300 // 悬停时间，单位ms, 悬停 hoverTime 后才会显示，默认为 0
                    , color: '#fff' // 字体颜色
                    , bgColor: '#858382' // 背景色
                    , header: true, // 表头支持 overflow
                    total: false // 合计行支持 overflow
                },
                contextmenu: {
                    header: [
                        {
                            name: '复制',
                            icon: 'layui-icon layui-icon-template',
                            click: function (obj) {
                                soulTable.copy(obj.text)
                                layer.msg('复制成功！')
                            }
                        },
                        {
                            name: '导出excel',
                            icon: 'layui-icon layui-icon-download-circle',
                            click: function () {
                                soulTable.export(this.id)
                            }
                        },
                        {
                            name: '重载表格',
                            icon: 'layui-icon layui-icon-refresh-1',
                            click: function () {
                                table.reload(this.id)
                            }
                        }
                    ],
                    // 表格内容右键菜单配置

                    body: [
                        {
                            name: '复制',
                            icon: 'layui-icon layui-icon-template',
                            click: function (obj) {
                                soulTable.copy(obj.text)
                                layer.msg('复制成功！')
                            }
                        },
                        {
                            name: '导出excel',
                            icon: 'layui-icon layui-icon-download-circle',
                            click: function () {
                                soulTable.export(tableindex, {curPage: true})
                            }
                        }, {
                            name: '重载表格',
                            icon: 'layui-icon layui-icon-refresh-1',
                            click: function () {
                                table.reload(this.id)
                            }
                        }
                    ],
                    // 合计栏右键菜单配置
                    total: [{
                        name: '复制',
                        icon: 'layui-icon layui-icon-template',
                        click: function (obj) {
                            soulTable.copy(obj.text)
                            layer.msg('复制成功！')
                        }
                    }]
                },
                excel: {
                    filename: opt.title + '.xlsx'
                }
                , defaultToolbar: [{
                    title: '显示/隐藏搜索'
                    , layEvent: 'hideSearch'
                    , icon: 'layui-icon-search'
                }, {
                    title: '重载' //标题
                    , layEvent: 'reloadTable'
                    , icon: 'layui-icon-refresh'
                }, 'filter', 'print', {
                    title: '导出' //标题
                    , layEvent: 'export' //事件名，用于 toolbar 事件中使用
                    , icon: 'layui-icon-export' //图标类名
                }]
            };
            var doneCallback = opt.done;
            var options = $.extend(defaults, opt);//合并配置
            //////////////////修改重置配置/////////////////////////////////
            $.each(options.cols[0], function (i, item) {
                //点击放大图片
                if (item.image != undefined) {
                    if (item.image.show === true) {
                        if (item.image.url == undefined)item.image.url = item.field + "_view";
                        if (item.image.class == undefined)item.image.class = "line-img";
                        if (item.image.style == undefined)item.image.style = "";
                        item.event = 'ViewImage_' + item.image.url;
                        item.style = 'cursor:pointer';
                        item.templet = '<div><img style="' + item.image.style + '" class="' + item.image.class + '" src="{{d.' + item.image.url + '}}"></div>';
                    }
                }
                //显示html
                if (item.text != undefined) {
                    if (item.text.show === true) {
                        if (item.text.html == undefined)item.text.html = "{{d." + item.field + "}}";
                        if (item.text.class == undefined)item.text.class = "title-2";
                        item.templet = '<div><div class="' + item.text.class + '">' + item.text.html + '</div></div>';
                    }
                }

                //显示COLOR
                if (item.color != undefined) {
                    item.templet = '<div><span style="color:' + item.color + '">{{d.' + item.field + '}}</span></div>';
                }
                //显示COLOR
                if (item.colorfield != undefined) {
                    item.templet = '<div><span style="color:{{d.' + item.colorfield + '}}">{{d.' + item.field + '}}</span></div>';
                }
            });
            ///////////////////////////////////////////////
            //设置默认服务端排序功能
            if (options.serviceSort) {
                options.autoSort = false;
                table.on('sort()', function (obj) {
                    if (obj.type == undefined || obj.type == 'null')obj.type = "asc";
                    var where = $.extend(tableindex.config.where, {orderby: obj.field + " " + obj.type});
                    tableindex.reload({initSort: obj, where: where});
                });
            }
            //修改单元格，监听单元格编辑
            if (options.editField) {
                table.on('edit()', function (obj) {
                    var value = obj.value, data = obj.data, field = obj.field;
                    layui.myTool.postMsg(options.editField.url, {key_id: data[options.editField.key], field: field, values: value});
                });
            }
            //////////////////////权限控制 //////////////////////////
            options.loadPermission = function (config) {
                var data = table.checkStatus(config.id).data;
                var btns = $(".layui-btn");
                var lengths = data.length;
                btns.each(function () {
                    if (typeof($(this).attr("permission-one")) != "undefined") {
                        if (lengths == 1) {
                            $(this).addClass($(this).attr("permission-one"));
                            $(this).removeClass("layui-btn-disabled");
                            $(this).removeClass("btn-disabled");
                            $(this).attr("disabled", false);
                        } else {
                            $(this).addClass($(this).attr("permission-one"));
                            $(this).removeClass("layui-btn-disabled");
                            $(this).addClass("btn-disabled");
                            $(this).attr("disabled", true);
                        }
                    } else if (typeof($(this).attr("permission-more")) != "undefined") {
                        if (lengths >= 1) {
                            $(this).addClass($(this).attr("permission-more"));
                            $(this).removeClass("layui-btn-disabled");
                            $(this).removeClass("btn-disabled");
                            $(this).attr("disabled", false);
                        } else {
                            $(this).removeClass($(this).attr("permission-more"));
                            $(this).removeClass("layui-btn-disabled");
                            $(this).addClass("btn-disabled");
                            $(this).attr("disabled", true);
                        }
                    } else {
                        $(this).removeClass("layui-btn-disabled");
                        $(this).removeClass("btn-disabled");
                    }
                });
            }
            ////扩展done函数
            options.done = function (res, curr, count) {
                layer.closeAll('loading');
                options.loadPermission(this);
                //关闭加载
                //固定列引发的问题
                table.resize(this.id);
                if (doneCallback) {
                    doneCallback(res, curr, count);
                }
                soulTable.render(this);
            };
            /////////////////////配置重置合并定义结束/////////////////////////////////////////////
            tableindex = table.render(options);
            //添加exports函数
            tableindex.exports = function (ids) {
                soulTable.export(ids);
                layer.msg("正在导出");
            };
            ////////////////////初始化后扩展函数/////////////////////////////////////////////////////

            /////////////////////////////////
            //on函数换义
            this.on = table.on;
            this.checkStatus = table.checkStatus;
            this.reload = function (opt) {
                var opt1 = $.extend(tableindex.config, opt);
                table.reload(opt1.id, {where: opt1.where});
            }
            ///////////////////
            //头工具栏事件
            table.on('toolbar()', function (obj) {
                switch (obj.event) {
                    case 'hideSearch':
                        var searchtable = $(".SearchTable");
                        if (searchtable.length == 0) {
                            layer.msg("无搜索条件");
                        } else if (searchtable.is(':visible')) {
                            searchtable.hide(300);
                        } else {
                            searchtable.show(300);
                        }
                        break;
                    case 'export':
                        soulTable.export(tableindex, {curPage: true})
                        break;
                    case 'reloadTable':
                        tableindex.reload();
                        break;
                }
            });
            ///////////////㢹出窗口//////////////////////////
            table.on('tool()', function (obj) {
                if (obj.event.startsWith('ViewImage_')) {
                    var imgurl = obj.event.substr(10, obj.event.length);
                    top.layer.open({
                        type: 1, shade: 0.2, title: '查看大图', area: ['600px', '400px'],
                        content: '<img src="' + eval("obj.data." + imgurl) + '" style="width:100%">'
                    });
                }
            });
            /////////////选框选中重置按钮权限/////////////////////
            table.on("checkbox()", function (obj) {
                options.loadPermission(options);
            });
            //////////////////////
            return tableindex;
        }
    }

    exports(model_name, obj);
});